Skip to Content
ШаблоныОбщая информация о шаблонах печатных формМетоды сложения и вычитания формул. Методы условий и форматов

Методы сложения и вычитания формул. Методы условий и форматов

Операции с формулами

К полям, которые предназначены для ввода числа, можно применять арифметические действия. Например, такие поля как Сумма, Оплаченная сумма, Кол-во, Вес и подобные складываются, вычитаются и делятся друг с другом и с другими цифрами через базовые операторы +  -  *  / 

Важно, чтобы все слагаемые представляли собой единую формулу — чтобы все содержимое было в единых рамках ${ }
Порядок вычислений регулируется круглыми скобками. 
Если в действии участвует дробная цифра, то дробная часть должна быть написана через точку, а не запятую. 

Примеры формул:

${(row.sum.sum - row.payedSum) / 100} ${(o.sum.sumInCurrency / 100) * 0.5} ${position.quantity * position.good.weight} ${(formatter.findAttribute(o, “Доп. поле”).longValue + (o.sum.sum/100)) * 0.3}

Формат Даты

Сама по себе дата выводится формулой ${o.moment} или ${row.moment}

В этом случае ячейке, в которой формула, нужно применить тип — Дата. Это Формат ячейки в Excel.

Но такой метод не будет работать, если в той же ячейке с формулой есть любой статичный текст или другая формула. Например, когда в одной строке, нужно вывести неразрывно:

Товарный чек № 00656 от 15.05.2024 12:50 

В таких случаях по отношению к формуле вывода даты применяется специальный метод formatter.format :

Товарный чек № ${o.name} от ${formatter.format(“%1$td.%1$tm.%1$tY %1$tH:%1$tM”, formatter.getExcelDate(o.moment))}

Формат записан в кавычках, это правило, по которому формула o.moment преобразуется в нужную форму.  

В данном случает в кавычках записан формат ДД.ММ.ГГГГ чч:мм — это так называемые флаги.

Возможные флаги форматирования для дат

ФлагОписание
%tBПолное название месяца, например, Январь, Февраль и т.д.
%tbСокращенное название месяца, например, Янв, Фев и т.д.
%tAПолное название дня недели, например, Понедельник, Вторник
%taСокращенное название дня недели, например, Пон, Вт и т.д.
%tYГод в формате 4 цифры, например, от 0000 до 9999
%tyГод в формате 2 цифры, например, от 00 до 99
%tmМесяц отформатирован с нуля в начале, например, от 01 до 12
%tDДата в формате %tm/%td/%ty
%tdДень месяца в формате двух цифр, например, от 01 до 31
%teДень месяца в формате без 0 в начале, например от 1 до 31
%tTВремя в 24-часовом формате, например, %tH:%tM:%tS
%tHЧас дня в 24-часовом формате, от 00 до 23
%tIЧас дня для 12-часового формата, например, от 01 до 12
%tMМинуты в часе форматируются с нуля в начале, например, от 00 до 59
%tSСекунды в минуте, состоящие из двух цифр, например, от 00 до 59

Примеры

${formatter.format(“%1$td.%1$tm.%1$tY”, formatter.getExcelDate(o.moment))}01.06.2024
${formatter.format(“%1$td.%1$tm.%1$ty”, formatter.getExcelDate(o.moment))}01.06.24
${formatter.format(”«%1$te» %1$tB %1$tY”, formatter.getExcelDate(o.moment))} года«11» июня 2024 года
${formatter.format(“%1$td %1$tb %1$tY”, formatter.getExcelDate(o.moment))} г.01 июн. 2024 г.

Формат Числа

Если формула выводит число (сумма, количество), то такой метод применяется, чтобы результат был с нужным количеством знаков в дробной части или без дробной части совсем.

Например, нужно вывести сумма документа в составе текста:
*Оплачено по договору на сумму 50000,00 рублей *
Если в шаблоне запись имеет такой вид:
Оплачено по договору на сумму ${o.tail.payedSum/100} рублей,
то результат будет: 
Оплачено по договору на сумму 50000.0 рублей

Результат такой, что число преобразовалось в текст. 
Чтобы этого избежать, формулы, которые должны выводить Число, нужно “экранировать” форматом числа.

В этом случае формула будет иметь вид:

Оплачено по договору на сумму ${formatter.format(“%.2f”, o.tail.payedSum / 100)} рублей

Формат записан в кавычках. Это правило, по которому знаков после запятой будет сколько нам надо.

Варианты: 

%.2f — 0,00
%.4f — 0,0000
%.0f — 0

Специальный метод, который выводит сумму с разрядностью: ${formatter.printLongAmount(o.sum.sum)} — 1 000 000,00

Формат Прописи

Применяется, когда нужно вывести число прописными буквами. Например, общее количество товаров прописью, кол-во штук прописью,  доп. поле с типом целого числа прописью.

Для сумм в валюте используется метод — printAmount

Например, нужно вывести в составе текста:
Итого к оплате: Тридцать шесть тысяч четыре рубля 00 копеек

В этом случае формула будет иметь вид:

Итого к оплате: ${formatter.printAmount(formatter.getCurrency(o), o.sum.sumInCurrency)}

Дополнительно прописью доступно выводить сумму на Английском и Украинском языках:
${formatter.printAmountINR(formatter.getCurrency(o), o.sum.sumInCurrency)} — eng. ${formatter.printAmountUA(formatter.getCurrency(o), o.sum.sumInCurrency)} — укр.

Для вывода других чисел (кол-во, доп. поле, вес и т.д.) используется метод — printNumber

Примеры:

ФормулаОписание
${formatter.printNumber(position.quantity)}Количество позиции
${formatter.printNumber(position.good.weight)}Вес позиции
${formatter.printNumber(formatter.calcTotalGoodsQuantity(o))}Кол-во товаров во всем документе
${formatter.printNumber(formatter.operationWeight(o))}Общий вес по документу
${formatter.printNumber(formatter.findAttribute(o, “Поставка (дней)“).longValue)}Число из доп. поля (тип Число)

printIf и printIfElse

Основной метод, когда нужно вывести то или иное значение при выполнении заданного условия.
Заключается в том, что задается условие и в зависимости от его результата сработает либо одна формула, либо другая.

Есть 2 варианта методов: 

  1. ${formatter.printIf(условие, формула при выполнении)}
  2. ${formatter.prinIfElse(условие, формула при выполнении, формула при НЕ выполнении)}
    Дословно объясняются так:
  3. вывести формулу ТОЛЬКО ЕСЛИ выполняется условие
  4. вывести формулу ЕСЛИ выполняется условие ИНАЧЕ вывести другую формулу

Самый распространенный пример такой формулы:

${formatter.printIfElse(empty(o.targetAgentRequisite.legalTitle), o.targetAgentRequisite.agent.name, o.targetAgentRequisite.legalTitle)}

— объясняется, как проверка наличия в карточке контрагента/организации полного юридического наименования. При НЕ заполненном полном наименовании в карточке выведется краткое и соответственно, если заполнено (условие не выполнено), то как раз полное и будет выведено. 

Существует также сокращенный вариант. Работает в точности, как formatter.prinIfElse, но имеет сокращенный вид записи:

${условие ? формула при выполнении : формула при НЕ выполнении}
${условие ? формула при выполнении : ” “}
Например:
${empty(o.targetAgentRequisite.legalTitle) ? o.targetAgentRequisite.agent.name : o.targetAgentRequisite.legalTitle}
${o.sourceAgent.getCompanyType() == “INPR” ? o.sourceAgentRequisite.ogrn : ” ”}

Другие примеры и операторы

ОператорПримерОписание
emptyне заполнено${formatter.printIfElse(empty(position.good.productCode), position.good.code, position.good.productCode)}ЕСЛИ артикул товара не заполнен ТО выводи код ИНАЧЕ артикул
!emptyзаполнено${formatter.printIf(!empty(o.contract), o.contract.name)}ЕСЛИ указан договор ТО выводи его название
==равно${formatter.printIf(row.payedSum == row.sum.sum, “Оплачено”, (row.sum.sum - row.payedSum) / 100)}ЕСЛИ оплачена вся сумма документа ТО вывести “Оплачено” ИНАЧЕ вывести остаток к оплате
!=не равно${formatter.printIfElse(row.stock != 0, row.stock, “Нет в наличие”)}ЕСЛИ остаток не 0 ТО вывести остаток ИНАЧЕ “какой-то текст”
>больше${formatter.printIfElse(row.stock > 0, “В наличие”, “Нет в наличие”)}ЕСЛИ остаток больше 0 ТО вывести “текст” ИНАЧЕ “другой текст”
<меньше  
&&и${formatter.printIf(row.payedSum == 0 && row.shippedSum== 0, row.name)}логическое И. Чтобы сравнивать в условии два и более свойств. Например, ЕСЛИ оплачено 0 (row.payedSum == 0) И отгружено 0 (row.shippedSum== 0)
||или${formatter.printIf(row.payedSum == 0 || row.shippedSum== 0, row.name)}логическое ИЛИ. В отличии от И условие считается выполненным, если хотя бы одно из нескольких свойств отвечает заданному параметру
+сложение${formatter.printIf(!empty(o.contract), “Договор ” + o.contract.name + ” от ” + formatter.format(“%1$td.%1$tm.%1$tY”, formatter.getExcelDate(o.contract.moment)))}Применятся, когда нужно прибавить “статичный текст” к формуле

Статичный текст в формулах пишется в двойных (“text”) или одинарных (‘text’) кавычках.